/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package matematicadiscretaxml;

import arbol_prueba.BTree;
import arbol_prueba.BTreeException;
import java.util.ArrayList;
import java.util.Stack;

/**
 *
 * @author diego
 */
public class Delete {

    ArrayList lista_lexemas = new ArrayList();
    private ArrayList lista_errores_delete = new ArrayList();

    Stack pila_pal_reserv = new Stack();
    Stack pila_identifica = new Stack();

    public Delete(){}

    public Delete(ArrayList _lista_lexemas)
    {
        lista_lexemas = _lista_lexemas;
    }

    public void ingresarPilas()
    {
        boolean bandera_from = false;
        boolean bandera_error = false;
        int indice_delete = -1;

        for(int i = 0; i < lista_lexemas.size(); i++)
        {
            if(!bandera_error)
            {
                if( ((Lexema)lista_lexemas.get(i)).getLexema().toLowerCase().equals("from") )
                {
                    bandera_from = true;
                }
                if(bandera_from == false)
                {
                    switch( ((Lexema)lista_lexemas.get(i)).getTipo_lexema() )
                    {
                        /*
                         * AQUI DEBE HABER UN ELSE YA QUE SOLO DEBEN HABER
                         * IDENTIFICADORES, SIMBOLOS, CONSTANTES CADENAS
                         *  Y CONSTANTES NUMEROS
                         */
                        case 1:
                            if( ((Lexema)lista_lexemas.get(i)).getLexema().toLowerCase().equals("delete") )
                            {
                                System.out.println("------------->ENTRA AQUI");
                                indice_delete = i;
                                pila_pal_reserv.push(lista_lexemas.get(i));
                            }
                            else
                            {
                                bandera_error = true;
                                lista_errores_delete.add(new Error("SENTENCIA ELIMINACION", "EXISTEN PALABRAS RESERVADAS NO PERMITIDAS EN DELETE"));
                            }
                            break;
                        default:
                            bandera_error = true;
                            lista_errores_delete.add(new Error("SENTENCIA ELIMINACION", "EXISTEN PALABRAS NO PERMITIDAS EN DELETE"));
                            break;
                    }
                }
            }
            
        }
        if(!bandera_from || indice_delete == -1)
        {
//            System.out.println("ENTRA AQUI");
            lista_errores_delete.add(new Error("SENTENCIA ELIMINACION", "NO SE ENCONTRO LA SENTENCIA DELETE"));
        }
//        else if
    }

    
    public BTree generarSubArbolDelete(BTree nodo_padre)
    {
        BTree nodo_aux = new BTree(null);
        
        if(nodo_padre.getElement() == "nulo")
        {
            if(!pila_pal_reserv.empty())
            {
                nodo_aux = new BTree(pila_pal_reserv.pop());
                if( ((Lexema)nodo_aux.getElement()).getLexema().toLowerCase().equals("delete") )
                {
                    try
                    {
                        nodo_aux.insertar(new BTree(new Lexema(0, null)), BTree.LADO_DRCHO);
                        nodo_aux.insertar(new BTree(new Lexema(0, null)), BTree.LADO_IZDO);
                    }
                    catch (BTreeException ex)
                    {
                        System.out.println(ex.getMessage());
                    }
                }
                else
                {
                    lista_errores_delete.add(new Error("BLOQUE DELETE", "NO COMIENZA CON LA PALABRA DELETE"));
                }
            }
            else
            {
                lista_errores_delete.add(new Error("BLOQUE DELETE", "NO COMIENZA CON LA PALABRA DELETE"));
            }
        }
        return nodo_aux;
    }

    /**
     * @return the lista_errores_delete
     */
    public ArrayList getlista_errores_delete() {
        return lista_errores_delete;
    }

    /**
     * @param lista_errores_delete the lista_errores_delete to set
     */
    public void setlista_errores_delete(ArrayList lista_errores_delete) {
        this.lista_errores_delete = lista_errores_delete;
    }

}
